Use case: Get temperature with software/hardware trigger (interrupt mode)

Sequence diagram

  @startuml
  participant "User Application" as User
  participant "HAL DTS Driver" as DTS #19DD3A
  participant "NVIC" as NVIC
  participant "HW" as HW

  == Process: Non-Blocking mode ==

  User -> DTS:HAL_DTS_Start_IT()

  User <-- DTS: HAL_OK
  activate HW #BLUE
  HW <-- : External HW trigger
  note left
  <font color=blue>only with hardware trigger configuration
  end note
  loop
  NVIC <- HW : end of measurement interrupt
  DTS <- NVIC : HAL_DTS_IRQHandler
  User <- DTS: HAL_DTS_EndCallback or \n HAL_DTS_AsyncEndCallback
  User --> DTS:
  DTS --> NVIC :

  User -> DTS:HAL_DTS_GetTemperature()
  User <-- DTS: HAL_OK
  end
  User -> DTS:HAL_DTS_Stop_IT()
  destroy HW #BLUE
  User <-- DTS: HAL_OK
  @enduml

Code snippet

HAL1

HAL2

DTS_HandleTypeDef hdts;

hdts.Init.TriggerInput = DTS_TRIGGER_SOFTWARE; /* DTS_TRIGGER_LPTIMER2 for HW trigger*/
HAL_DTS_Init(&hdts);

HAL_DTS_Start_IT(&hdts);
HAL_DTS_GetTemperature(&hdts, &temp);
HAL_DTS_Stop_IT(&hdts);
hal_dts_handle_t hDTS;
HAL_DTS_Init(&hDTS, HAL_DTS);
hal_dts_sensor_config_t sensor_cfg;
int32_t temp;

sensor_cfg.trigger = HAL_DTS_TRIGGER_SOFTWARE; /* HAL_DTS_TRIGGER_LPTIM2_CH1 for HW trigger */
sensor_cfg.sampling_time = HAL_DTS_SAMPLING_TIME_1_CYCLE;
HAL_DTS_SetConfigSensor(&hDTS, HAL_DTS_SENSOR_1, &sensor_cfg);
HAL_DTS_StartSensor_IT(&hDTS, HAL_DTS_SENSOR_1);
HAL_DTS_GetSensorTemperature(&hDTS, HAL_DTS_SENSOR_1, &temp);
HAL_DTS_StopSensor_IT(&hDTS, HAL_DTS_SENSOR_1);

Key changes

  1. HAL2 uses per-sensor interrupt start/stop APIs (HAL_DTS_StartSensor_IT() and HAL_DTS_StopSensor_IT()).

  2. The HAL2 completion callback is consolidated as HAL_DTS_CpltCallback.